#include "Menu.h"
#include <iostream>
using namespace irr;
using namespace gui;

Menu::Menu(IrrlichtDevice *device, bool lunettes, bool wiimote) {
    lunettes_on = lunettes;
    wiimote_on = wiimote;
    m_device = device;
    GUI_last_change = 0;
    // Fenetre menu rapide
    m_environment = m_device->getGUIEnvironment();
    fenetre_menu = m_environment->addWindow(core::rect<s32>(0,0,140,80),false,L"Menu",0,GUI_ID_QUICK_MENU);

    // Texte etat batteries
    etat_batterie = m_device->getGUIEnvironment()->addStaticText(L" Batterie 1 : XX%\n Batterie 2 : XX%\n Batterie 3 : Deconnectee",core::rect<s32>(0,20,100,100),
                                                                  false,
                                                                  true,
                                                                  fenetre_menu,
                                                                  -1,
                                                                  true);


    // Liste de choix de la couleur
    choix_couleur = m_environment->addListBox(core::rect<s32>(100,20,119,100),fenetre_menu);
    choix_couleur->addItem(L"");
    choix_couleur->addItem(L"");
    choix_couleur->addItem(L"");
    choix_couleur->setItemOverrideColor(1,EGUI_LBC_TEXT_HIGHLIGHT,video::SColor(255,255,0,0));
    choix_couleur->setDrawBackground(true);
    choix_couleur->setToolTipText(L"Couleur");

    video::ITexture *pouet=device->getVideoDriver()->getTexture("media\\jaune.png");
    m_environment->addImage(pouet,core::position2di(5,3),false,choix_couleur);
    pouet=device->getVideoDriver()->getTexture("media\\rouge.png");
    m_environment->addImage(pouet,core::position2di(5,17),false,choix_couleur);
    pouet=device->getVideoDriver()->getTexture("media\\vert.png");
    m_environment->addImage(pouet,core::position2di(5,31),false,choix_couleur);
    // Remarque : taille ligne : 1 vide + 13 pixel par ligne


    // Liste de choix de la taille
    choix_taille = m_environment->addListBox(core::rect<s32>(119,20,140,100),fenetre_menu);
    choix_taille->addItem(L"1");
    choix_taille->addItem(L"2");
    choix_taille->addItem(L"3");
    choix_taille->addItem(L"4");
    choix_taille->setText(L"Taille");
    choix_taille->setDrawBackground(true);
    choix_taille->setToolTipText(L"Taille");


    size = 0;
    color = JAUNE;

    // Menu principal (200*300)
    menu_principal = m_environment->addWindow(core::rect<s32>(300,150,500,450),false,L"Menu",0,GUI_ID_MAIN_WINDOW);
    menu_principal -> getCloseButton()->remove();
    menu_principal ->setDraggable(false);
    menu_principal -> setVisible(false);

    // Bouton quitter
    m_environment->addButton(core::rect<s32>(50,200,150,220),menu_principal,GUI_ID_QUIT_BUTTON,L"Quitter");

    // Bouton activer 3D
    m_environment->addButton(core::rect<s32>(50,100,150,120),menu_principal,GUI_ID_3D_BUTTON,L"Activer 3D");


    // Erreurs
    if (wiimote_on){
        m_environment -> addMessageBox(L"Erreur",L"Wiimote non connectee, le programme va maintenant s'arreter",true,irr::gui::EMBF_OK,0,GUI_ID_DIALOG_WIIMOTE_FAIL);

    }
    else
        if (!lunettes_on){
        m_environment -> addMessageBox(L"Erreur",L"Lunettes non connectee, la 3D est desactivee. \nSouhaitez vous continuer ?",true,irr::gui::EMBF_YES |irr::gui::EMBF_NO,0,GUI_ID_DIALOG_LUNETTES_FAIL);
        }

}


void Menu::nextSize(){
    if (size < 3) size++;
    else size = 0;

};

void Menu::nextColor(){
    if (color < VERT) color++;
    else color = 0;

};

void Menu::previousSize(){
    if (size > 0) size--;
    else size = 3;
    choix_taille->setSelected(size);
};

void Menu::previousColor(){
    if (color > JAUNE) color--;
    else color = VERT;

    choix_couleur->setSelected(color);

};


void Menu::drawAll(){
    //TODO : actualiser - l'etat des batterie
    //                  - la position du curseur (en relatif par rapport a la camera)
    m_device->getGUIEnvironment()->drawAll();
    color = choix_couleur -> getSelected();
    size = choix_taille -> getSelected();
}

void Menu::setVisible(){
    if (m_device -> getTimer()->getRealTime() - GUI_last_change > 500){
        GUI_last_change = m_device -> getTimer()->getRealTime();
        if (fenetre_menu->isVisible())
            fenetre_menu->setVisible(false);
        else fenetre_menu->setVisible(true);
    }
}

void Menu::toggleMainMenu(){
    if (m_device -> getTimer()->getRealTime() - GUI_last_change > 500){
        GUI_last_change = m_device -> getTimer()->getRealTime();
        if (menu_principal->isVisible()){
            menu_principal->setVisible(false);
            m_device->getCursorControl()->setVisible(false);
            m_device->getSceneManager()->getActiveCamera()->setInputReceiverEnabled(true);
        }
        else {
            menu_principal->setVisible(true);
            m_device->getCursorControl()->setVisible(true);
            m_device->getSceneManager()->getActiveCamera()->setInputReceiverEnabled(false);
        }
    }
}

void Menu::setCursorDraggable(){
    if (m_device -> getTimer()->getRealTime() - GUI_last_change > 500){
        GUI_last_change = m_device -> getTimer()->getRealTime();
        if (m_device->getSceneManager()->getActiveCamera()->isInputReceiverEnabled())
            m_device->getSceneManager()->getActiveCamera()->setInputReceiverEnabled(false);
        else m_device->getSceneManager()->getActiveCamera()->setInputReceiverEnabled(true);
        m_device->getCursorControl()->setVisible(!m_device->getCursorControl()->isVisible());
    }
}

void Menu::activer3D(){
    if (!lunettes_on){
        m_environment -> addMessageBox(L"Erreur",L"Les lunettes ne sont pas branchees, impossible d'activer la 3D",false,irr::gui::EMBF_OK,0,GUI_ID_DIALOG_LUNETTES_FAIL);
        std::cout << "Les lunettes ne sont pas branchees, impossible d'activer la 3D";
    } else
    if (m_device -> getTimer()->getRealTime() - GUI_last_change > 500){
        GUI_last_change = m_device -> getTimer()->getRealTime();
    }
}
